package controller

import (
	"enca/module/admin"
	"enca/module/blog"
	"enca/module/login"
	"fmt"
	"net/http"
	"path"
	"time"

	"github.com/dgrijalva/jwt-go"
	"github.com/gin-gonic/gin"
)

// 自定义一个字符串
var jwtkey = []byte("www.doujiabao.com.cn")

type Claims struct {
	UserId uint
	jwt.StandardClaims
}

// 博客管理 登录
func AdminLogin(c *gin.Context) {
	// 账号
	userAccount := c.PostForm("userAccount")
	// 密码
	userPassword := c.PostForm("userPassword")

	code, data := login.Login(userAccount, userPassword)

	if code == 200 {
		//生成token
		expireTime := time.Now().Add(7 * 24 * time.Hour)
		claims := &Claims{
			UserId: 2,
			StandardClaims: jwt.StandardClaims{
				ExpiresAt: expireTime.Unix(), // 过期时间
				IssuedAt:  time.Now().Unix(),
				Issuer:    "dou-blog",  // 签名颁发者
				Subject:   "token", // 签名主题
			},
		}
		token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
		tokenString, err := token.SignedString(jwtkey)
		if err != nil {
			fmt.Println(err)
		}

		//设置游览器cookie start
		c.SetCookie("d_logintoken", tokenString, 86400, "/", "https://blog.doujiabao.com.cn/", false, false)
	}

	c.JSON(http.StatusOK, gin.H{
		"code": code,
		"data": data,
	})
}

//博客管理 图片上传
func AdminUploadImage(c *gin.Context) {
	// 接收
	// 接收
	file, err := c.FormFile("file")
	// error
	if err != nil {
		c.String(500, "上传图片出错")
		return
	}
	// 设置文件需要保存的指定位置并设置保存的文件名字
	dst := path.Join("/root/blog/assets/images", file.Filename)
	// 如果没报错则...
	if err := c.SaveUploadedFile(file, dst); err != nil {
		c.String(http.StatusBadRequest, "保存失败 Error:%s", err.Error())
		return
	}
	// 错误弹出
	if err != nil {
		panic(err)
	}
	// rqs
	c.JSON(http.StatusOK, gin.H{
		"code": 200,
		"data": "https://blog.doujiabao.com.cn/assets/images/" + file.Filename,
	})
}

//博客管理 博客列表
func AdminBlogList(c *gin.Context) {
	code, data := admin.BlogList()

	c.JSON(http.StatusOK, gin.H{
		"code": code,
		"data": data,
	})
}

//博客管理 博客新增
func AdminBlogAdd(c *gin.Context) {
	//账号
	title := c.PostForm("title")
	//密码
	content := c.PostForm("content")
	//创建时间
	releaseTime := c.PostForm("releaseTime")
	//最后更新时间
	updateTime := c.PostForm("updateTime")
	//状态
	state := c.PostForm("state")

	code, data := admin.BlogAdd(title, content, releaseTime, updateTime, state)

	c.JSON(http.StatusOK, gin.H{
		"code": code,
		"data": data,
	})
}

//博客管理 博客删除
func AdminBlogDel(c *gin.Context) {
	//账号
	id := c.PostForm("id")

	code, data := admin.BlogDel(id)

	c.JSON(http.StatusOK, gin.H{
		"code": code,
		"data": data,
	})
}

//博客管理 博客上下线
func AdminBlogOnline(c *gin.Context) {
	//id
	id := c.PostForm("id")
	//state
	state := c.PostForm("state")

	code, data := admin.BlogOnline(id, state)

	c.JSON(http.StatusOK, gin.H{
		"code": code,
		"data": data,
	})
}

//博客管理 博客配置信息
func AdminBlogConfig(c *gin.Context) {
	code, data := admin.BlogConfig()

	c.JSON(http.StatusOK, gin.H{
		"code": code,
		"data": data,
	})
}

//博客管理 博客配置信息修改
func AdminBlogConfigUpdate(c *gin.Context) {
	bg := c.PostForm("bg")
	title := c.PostForm("title")
	descs := c.PostForm("descs")
	other := c.PostForm("other")

	code, data := admin.BlogConfigUpdate(bg, title, descs, other)

	c.JSON(http.StatusOK, gin.H{
		"code": code,
		"data": data,
	})
}

//博客管理 博客详情
func AdminBlogDetail(c *gin.Context) {
	id := c.PostForm("id")

	code, data := admin.BlogDetail(id)

	c.JSON(http.StatusOK, gin.H{
		"code": code,
		"data": data,
	})
}

//博客管理 博客修改
func AdminBlogEdit(c *gin.Context) {
	id := c.PostForm("id")
	title := c.PostForm("title")
	content := c.PostForm("content")
	updateTime := c.PostForm("updateTime")

	code, data := admin.BlogEdit(id, title, content, updateTime)

	c.JSON(http.StatusOK, gin.H{
		"code": code,
		"data": data,
	})
}

//博客管理 画板删除
func AdminDrawingDel(c *gin.Context) {
	id := c.PostForm("id")

	code, data := admin.BlogDrawingDel(id)

	c.JSON(http.StatusOK, gin.H{
		"code": code,
		"data": data,
	})
}

//博客 博客列表
func Blogs(c *gin.Context) {
	code, data := blog.Blogs()

	c.JSON(http.StatusOK, gin.H{
		"code": code,
		"data": data,
	})
}

//博客 新增评论
func CommentAdd(c *gin.Context) {
	//评论博客
	id := c.PostForm("id")
	//评论者
	name := c.PostForm("name")
	//评论内容
	content := c.PostForm("content")
	//评论时间
	time := c.PostForm("time")

	code, data := blog.CommentAdd(id, name, content, time)

	c.JSON(http.StatusOK, gin.H{
		"code": code,
		"data": data,
	})
}

//博客 博客详情
func BlogDetail(c *gin.Context) {
	//id
	id := c.PostForm("id")

	code, data := blog.BlogDetail(id)

	c.JSON(http.StatusOK, gin.H{
		"code": code,
		"data": data,
	})
}

//博客 画板上传
func UploadImageDrawing(c *gin.Context) {
	// 接收
	file, err := c.FormFile("file")
	// error
	if err != nil {
		c.String(500, "上传图片出错")
		return
	}
	// 设置文件需要保存的指定位置并设置保存的文件名字
	dst := path.Join("/root/blog/assets/images/drawing", file.Filename)
	// 如果没报错则...
	if err := c.SaveUploadedFile(file, dst); err != nil {
		c.String(http.StatusBadRequest, "保存失败 Error:%s", err.Error())
		return
	}
	// 错误弹出
	if err != nil {
		panic(err)
	}

	//地址
	src := "https://blog.doujiabao.com.cn/assets/images/drawing/" + file.Filename
	//作品名称
	name := c.PostForm("name")
	//发表时间
	time := c.PostForm("time")

	code, data := blog.UploadImageDrawing(src, name, time)

	c.JSON(http.StatusOK, gin.H{
		"code": code,
		"data": data,
	})
}

//博客 画板列表
func Drawings(c *gin.Context) {
	code, data := blog.Drawings()

	c.JSON(http.StatusOK, gin.H{
		"code": code,
		"data": data,
	})
}

//博客 首页配置
func IndexConfig(c *gin.Context) {
	code, data := blog.IndexConfig()

	c.JSON(http.StatusOK, gin.H{
		"code": code,
		"data": data,
	})
}

//骰子 加入房间
// func JoinRoom(c *gin.Context) {
// 	code, data := shaizi.JoinRoom(c.PostForm("id"))

// 	c.JSON(http.StatusOK, gin.H{
// 		"code": code,
// 		"data": data,
// 	})
// }
